﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL.Entity;
using DAL.Persistencia;

namespace NewTierra.Pages.CPacote
{
    public partial class PacoteConsulta : System.Web.UI.Page
    {
        string SearchString = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Cookies["UsuarioNewTierra"] == null)
            {
                Response.Redirect("~/Pages/Login.aspx", false);
                return;
            }

            if (!IsPostBack)
            {
                ViewState["IdPacote"] = "";

                PopularGridPacote();
                this.txtNomePacoteSearch.Attributes.Add("onkeyup", string.Format("javascript:__doPostBack('{0}','')", this.UpdatePanel1.ClientID));
            }
            else
            {
                string target = this.Request.Form["__EVENTTARGET"];
                if (!string.IsNullOrEmpty(target) && target.Equals(this.UpdatePanel1.ClientID))
                {
                    if (!string.IsNullOrEmpty(this.txtNomePacoteSearch.Text))
                    {
                        PopularGridPacote(txtNomePacoteSearch.Text);
                    }
                    else
                    {
                        PopularGridPacote();
                    }
                }
            }
        }

        private Usuario ReadCookiesUser()
        {
            if (Request.Cookies["UsuarioNewTierra"]["id"] != null)
            {
                string userSettings = Request.Cookies["UsuarioNewTierra"]["id"];
                var usuario = new UsuarioDAL().ObterPorId(Convert.ToInt32(userSettings));
                Session["LoggedUser"] = usuario.US_id;
                return usuario;
            }
            else
            {
                return null;
            }
        }

        #region Popular Dados

        protected void PopularGridPacote()
        {
            try
            {
                gvPacotes.DataSource = new PacoteDAL().ListarTodos();
                gvPacotes.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void PopularGridPacote(string Nome)
        {
            try
            {
                gvPacotes.DataSource = new PacoteDAL().ListarTodosSearch(Nome);
                gvPacotes.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void PopularGridPacote(DateTime dtIn, DateTime dtOut)
        {
            try
            {
                gvPacotes.DataSource = new PacoteDAL().ListarTodosSearch(dtIn, dtOut);
                gvPacotes.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void PopularGridGeral(string Code)
        {
            try
            {
                gvPkgMontado.DataSource = new PacoteDAL().ListarTodos(Code, "");
                gvPkgMontado.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void PopularGridHoteis(string Code)
        {
            try
            {
                gvHoteis.DataSource = new PacoteDAL().ListarTodosHoteis(Code);
                gvHoteis.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void PopularGridServicos(string Code)
        {
            try
            {
                gvServicos.DataSource = new PacoteDAL().ListarTodosServicos(Code);
                gvServicos.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void PopularGridExtra(string Code)
        {
            try
            {
                gvExtras.DataSource = new PacoteDAL().ListarTodosExtras(Code);
                gvExtras.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void PopularFotos()
        {
            try
            {
                DataListFotos.DataSource = new PacoteFotoDAL().ListarTodosLista(ViewState["IdPacote"].ToString());
                DataListFotos.DataBind();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        #endregion

        #region Regras

        protected void MostrarMsg(string Msg)
        {
            ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "call me", "showAutoCloseMessage('" + Msg + "')", true);
        }

        protected void lnkVoltaMenu_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Pages/Index.aspx");
        }

        public string HighlightText(string InputTxt)
        {
            string Search_Str = txtNomePacote.Text.ToString();
            // Setup the regular expression and add the Or operator.
            Regex RegExp = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);
            // Highlight keywords by calling the
            //delegate each time a keyword is found.
            return RegExp.Replace(InputTxt, new MatchEvaluator(ReplaceKeyWords));
            // Set the RegExp to null.
            RegExp = null;
        }

        public string ReplaceKeyWords(Match m)
        {
            return "<span class=highlight>" + m.Value + "</span>";
        }

        protected void btnAddDecricao_Click(object sender, EventArgs e)
        {
            Paneldescr.Visible = true;
            btnSalvarDescr.Visible = true;
            EnviarVerFotos.Visible = false;

            lblTituloModal.Text = "Cadastrar Descrição";

            if (!ViewState["IdPacote"].Equals(""))
            {
                Pacote_Descricao pd = new PacoteDescricaoDAL().ObterPorCode(ViewState["IdPacote"].ToString());

                if (pd != null)
                {
                    EditorDescrPacote.Content = pd.Pacote_descr;
                }
            }

            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
        }

        protected void btnAddFotos_Click(object sender, EventArgs e)
        {
            //PanelAddFotos.Visible = true;
            Paneldescr.Visible = false;
            EnviarVerFotos.Visible = true;

            lblTituloModal.Text = "Cadastrar Fotos - Pacote: " + ViewState["IdPacote"] + " Nome: " + txtNomePacote.Text;

            btnSalvarDescr.Visible = false;

            if (!ViewState["IdPacote"].Equals(""))
            {

            }

            Session["CodePacote"] = ViewState["IdPacote"];

            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
        }

        protected void imgAtualiza_Click(object sender, ImageClickEventArgs e)
        {
            PopularFotos();
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "hide", "<script>removeModalClass();</script>", false);
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
        }

        protected void btnProcurarDatas_Click(object sender, EventArgs e)
        {
            if (!txtDataFromSearch.Text.Equals("") && !txtDataToSearch.Text.Equals(""))
                PopularGridPacote(Convert.ToDateTime(txtDataFromSearch.Text), Convert.ToDateTime(txtDataToSearch.Text));
            else
                PopularGridPacote();
        }

        #endregion

        #region CRUD Pacote

        protected void btnEditar_Command(object sender, CommandEventArgs e)
        {
            try
            {
                PacoteDAL pd = new PacoteDAL();
                List<Pacote> lista = pd.ListarTodos(e.CommandArgument.ToString(), "");

                lblCodePacote.Text = lista.First().Pacote_Code;
                txtNomePacote.Text = lista.First().Pacote_NomePacote;

                txtValorTotal.Text = lista.First().Pacote_ValorTotal != null ? lista.First().Pacote_ValorTotal.ToString() : "";

                PopularGridGeral(e.CommandArgument.ToString());
                PopularGridHoteis(e.CommandArgument.ToString());
                PopularGridServicos(e.CommandArgument.ToString());
                PopularGridExtra(e.CommandArgument.ToString());

                ViewState["IdPacote"] = e.CommandArgument.ToString();

                PopularFotos();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void btnDeletar_Command(object sender, CommandEventArgs e)
        {
            try
            {
                PacoteDAL pd = new PacoteDAL();
                foreach (Pacote item in pd.ListarTodos(e.CommandArgument.ToString(), "")) pd.Excluir(item);
                PopularGridPacote();
                MostrarMsg("Registro excluído com sucesso.");
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        #endregion

        #region CRUD Adicionais Pacote

        protected void btnSalvarDescr_Click(object sender, EventArgs e)
        {
            try
            {
                PacoteDescricaoDAL pddal = new PacoteDescricaoDAL();

                if (!ViewState["IdPacote"].Equals(""))
                {
                    Pacote_Descricao pd = pddal.ObterPorCode(ViewState["IdPacote"].ToString());

                    if (pd != null)
                    {
                        pd.Pacote_descr = EditorDescrPacote.Content;
                        pddal.Atualizar(pd);
                        //ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('Registro atualizado com sucesso.');", true);
                    }
                    else
                    {
                        Pacote_Descricao pdes = new Pacote_Descricao();
                        pdes.Pacote_descr = EditorDescrPacote.Content;
                        pdes.Pacote_Code = ViewState["IdPacote"].ToString();
                        pddal.Salvar(pdes);
                        //ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('Registro cadastrado com sucesso.');", true);
                    }
                }               

                MostrarMsg("Registro atualizado com sucesso.");

                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "hide", "<script>removeModalClass();</script>", false);
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void FileUploadComplete(object sender, EventArgs e)
        {
            //string filename = System.IO.Path.GetFileName(AsyncFileUpload1.FileName);
            //AsyncFileUpload1.SaveAs(Server.MapPath("~/Galeria/Pacote/") + filename);
            Thread.Sleep(1000);

            try
            {
                if (ValidarFoto())
                {
                    string foto = Convert.ToString(Guid.NewGuid().ToString("n") + ".jpg");

                    if (CriarPastaPacote())
                    {

                        if (SalvarFoto(foto))
                        {
                            AsyncFileUpload1.SaveAs(HttpContext.Current.Server.MapPath("~/Galeria/Pacote/" + ViewState["IdPacote"] + "/") + foto);

                            new PacoteFotoDAL().ImagemPrincipal(ViewState["IdPacote"].ToString());

                            PopularFotos();
                        }
                    }
                    else
                    {
                        throw new Exception("Erro. Não foi possível enviar a foto.");
                    }
                }


                //ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('Foto cadastrada com sucesso.');", true);
                //PopularFotos();
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        //protected void btnUpload_Click(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        if (ValidarFoto())
        //        {
        //            string foto = Convert.ToString(Guid.NewGuid().ToString("n") + ".jpg");

        //            if (CriarPastaPacote())
        //            {

        //                if (SalvarFoto(foto))
        //                {
        //                    FileUpload1.PostedFile.SaveAs(HttpContext.Current.Server.MapPath("~/Galeria/Pacote/" + ViewState["IdPacote"] + "/") + foto);

        //                    new PacoteFotoDAL().ImagemPrincipal(ViewState["IdPacote"].ToString());

        //                    PopularFotos();
        //                }
        //            }
        //            else
        //            {
        //                throw new Exception("Erro. Não foi possível enviar a foto.");
        //            }
        //        }

        //        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('Foto cadastrada com sucesso.');", true);
        //        PopularFotos();

        //        //ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
        //    }
        //    catch (Exception ex)
        //    {
        //        MostrarMsg(ex.Message);
        //    }
        //}

        protected bool ValidarFoto()
        {
            try
            {
                if (AsyncFileUpload1.HasFile)
                {
                    if (AsyncFileUpload1.PostedFile.FileName.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || AsyncFileUpload1.PostedFile.FileName.EndsWith(".gif", StringComparison.OrdinalIgnoreCase))
                    {
                        //Verificar o tamanho do Arquivo (Até 1MB)
                        if (AsyncFileUpload1.PostedFile.ContentLength <= (1024 * 1024))
                        {
                            return true;
                        }
                        else
                        {
                            throw new Exception("Erro. Selecione apenas imagens de até 1MB");
                        }
                    }
                    else
                    {
                        throw new Exception("Erro. Selecione apenas imagens jpg ou gif.");
                    }
                }
                else
                {
                    throw new Exception("Erro. Informe um arquivo para Upload.");
                }
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
                return false;
            }
        }

        protected bool CriarPastaPacote()
        {
            string path = ("~/Galeria/Pacote/" + ViewState["IdPacote"]);
            try
            {
                if (!Directory.Exists(Server.MapPath(path)))
                { Directory.CreateDirectory(Server.MapPath(path)); }
                return true;
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
                return false;
            }
        }

        protected bool SalvarFoto(string ImgNome)
        {
            Pacote_Foto s = new Pacote_Foto();

            try
            {
                s.Pacote_Foto_capa = "N";
                s.Pacote_Foto_nome = ImgNome;
                s.Pacote_Foto_hupload = Convert.ToString(DateTime.Now);
                s.Pacote_Code = ViewState["IdPacote"].ToString();

                new PacoteFotoDAL().Salvar(s);

                return true;
            }
            catch (Exception ex)
            {
                MostrarMsg("Erro: " + ex.Message);
                return false;
            }
        }

        protected void CapaFoto(object sender, CommandEventArgs e)
        {
            try
            {
                PacoteFotoDAL f = new PacoteFotoDAL();

                f.AddImagemPrincipal(ViewState["IdPacote"].ToString(), Convert.ToInt32(e.CommandArgument));

                MostrarMsg("Registro atualizado com sucesso.");

                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "hide", "<script>removeModalClass();</script>", false);
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void ExcluirFoto(object sender, CommandEventArgs e)
        {
            PacoteFotoDAL f = new PacoteFotoDAL();

            try
            {
                var myId = e.CommandArgument;

                Pacote_Foto si = f.ObterPorId(Convert.ToInt32(myId));

                if (!ExcluiFotoPasta(si.Pacote_Foto_nome))
                {
                    throw new Exception("Erro: Não foi possível deletar a foto da pasta galeria");
                }

                f.Excluir(si);

                PopularFotos();
                MostrarMsg("Foto excluída com sucesso.");

                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "hide", "<script>removeModalClass();</script>", false);
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
                return;
            }

        }

        protected bool ExcluiFotoPasta(string foto)
        {
            try
            {
                string path = "~/Galeria/Pacote/" + ViewState["IdPacote"] + "/" + foto;
                System.IO.File.Delete(Server.MapPath(path));
                return true;
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
                return false;
            }
        }

        protected void btnSalvaTotal_Click(object sender, EventArgs e)
        {
            try
            {
                PacoteDAL pd = new PacoteDAL();

                foreach (Pacote item in pd.ListarTodos(ViewState["IdPacote"].ToString(), ""))
                {
                    Pacote pac = new Pacote();

                    pac.Pacote_ValorTotal = Convert.ToDecimal(txtValorTotal.Text);
                    pac.Pacote_id = item.Pacote_id;

                    pd.AtualizarValor(pac);
                }

                MostrarMsg("Valor atualizado com sucesso.");
            }
            catch (Exception ex)
            {
                MostrarMsg(ex.Message);
            }
        }

        protected void DataListFotos_ItemCreated(object sender, DataListItemEventArgs e)
        {
            //LinkButton btnCapaFoto = (LinkButton)e.Item.FindControl("btnCapaFoto");
            //LinkButton btnExcluirFoto = (LinkButton)e.Item.FindControl("btnExcluirFoto");

            //if (btnCapaFoto != null)
            //{
            //    ScriptManager1.RegisterPostBackControl(btnCapaFoto);
            //}

            //if (btnExcluirFoto != null)
            //{
            //    ScriptManager1.RegisterPostBackControl(btnExcluirFoto);
            //}
        }

        #endregion        

    }
}